import pandas as pd
from io import StringIO

# 2020 年新冠肺炎疫情期间，“北京发布”微信公众号每天会发布北京市上一日疫情数据，其中会介绍全市 16 区无报告病例天数情况。原始数据如下：
# 北京各区最后一例确诊日期
text = '''
地区 最后一例确诊日期
顺义区 2020-02-08
平谷区 Nan
昌平区 2020-08-06
大兴区 2020-06-30
密云区 2020-02-11
石景山区 2020-06-14
海淀区 2020-06-25
东城区 2020-06-16
门头沟区 2020-06-15
房山区 2020-06-15
延庆区 2020-01-23
怀柔区 2020-02-06
朝阳区 2020-06-21
西城区 2020-06-22
通州区 2020-06-20
丰台区 2020-07-05
'''

df = pd.read_csv(StringIO(text), sep=" ")
print(df)

# 接着增加一列统计天数。先将确诊日期转换为时间类型，进行缺失值处理，接着与当天时间相减计算出天数：

df = df.replace("Nan", pd.NaT)  # 将空值更改为空时间类型
# 将 最后一例确诊日期 更改为时间类型
df["最后一例确诊日期"] = df["最后一例确诊日期"].astype("datetime64[ns]")

# 增加无报告病例天数列，当日与确诊相减
df = df.assign(无报告病例天数=lambda x: pd.Timestamp("2020-11-16") - x["最后一例确诊日期"])

# 更改类型为天
df["无报告病例天数"] = df["无报告病例天数"].dt.days

# 排序，空值在前 加重置索引
df = df.sort_values("无报告病例天数", ascending=False, na_position="first", ignore_index=True)

# 最后还可以将结果进行迭代操作形成文字，方便在公众号中发布。
print(df)
